<?php

namespace app\admin\model;
use think\Model;
use think\Db;

class CommunityClasses extends Model
{
    // 表名
    public $name = 'community_classes';
    
    // 自动写入时间戳字段
    protected $autoWriteTimestamp = 'datetime';

    // 定义时间戳字段名
    protected $createTime = 'create_time';
    protected $updateTime = 'update_time';
    
    // 定义字段类型
    protected $type = [
        'id' => 'integer',
        'admin_id' => 'integer',
        'is_open_join' => 'integer',
        'need_verify' => 'integer',
        'show_in_team_list' => 'integer',
        'members_can_view_detail' => 'integer',
        'status' => 'integer',
        'weigh' => 'integer',
    ];
    
    // 追加属性
    protected $append = [
        'status_text',
        'is_open_join_text',
        'need_verify_text',
        'show_in_team_list_text',
        'members_can_view_detail_text',
    ];
    
    /**
     * 关联管理员
     */
    public function admin()
    {
        return $this->belongsTo('Admin', 'admin_id', 'id');
    }
    
    /**
     * 获取状态文本
     */
    public function getStatusTextAttr($value, $data)
    {
        $status = isset($data['status']) ? $data['status'] : 0;
        $list = [0 => '失效', 1 => '正常'];
        return isset($list[$status]) ? $list[$status] : '';
    }
    
    /**
     * 获取是否开放申请加入文本
     */
    public function getIsOpenJoinTextAttr($value, $data)
    {
        $is_open_join = isset($data['is_open_join']) ? $data['is_open_join'] : 0;
        $list = [0 => '否', 1 => '是'];
        return isset($list[$is_open_join]) ? $list[$is_open_join] : '';
    }
    
    /**
     * 获取加入班级是否需要验证文本
     */
    public function getNeedVerifyTextAttr($value, $data)
    {
        $need_verify = isset($data['need_verify']) ? $data['need_verify'] : 0;
        $list = [0 => '否', 1 => '是'];
        return isset($list[$need_verify]) ? $list[$need_verify] : '';
    }
    
    /**
     * 获取是否在班级团队列表呈现文本
     */
    public function getShowInTeamListTextAttr($value, $data)
    {
        $show_in_team_list = isset($data['show_in_team_list']) ? $data['show_in_team_list'] : 0;
        $list = [0 => '否', 1 => '是'];
        return isset($list[$show_in_team_list]) ? $list[$show_in_team_list] : '';
    }
    
    /**
     * 获取班级成员是否可查看详情文本
     */
    public function getMembersCanViewDetailTextAttr($value, $data)
    {
        $members_can_view_detail = isset($data['members_can_view_detail']) ? $data['members_can_view_detail'] : 0;
        $list = [0 => '否', 1 => '是'];
        return isset($list[$members_can_view_detail]) ? $list[$members_can_view_detail] : '';
    }
    
    /**
     * 生成班级二维码
     * @param int $id 班级ID
     * @return string 二维码图片路径
     */
    public static function generateQrcode($id)
    {
        // 这里可以根据实际需求生成二维码
        // 简单示例：返回一个默认二维码路径
        return '/assets/qrcode/community_class_' . $id . '.png';
    }
    
    /**
     * 获取班级成员数量
     * @param int $classId 班级ID
     * @return int 成员数量
     */
    public static function getMemberCount($classId)
    {
        // 这里需要根据实际的成员关联表进行查询
        // 假设有一个班级成员关联表 fa_community_class_members
        return Db::name('community_class_members')
            ->where('class_id', $classId)
            ->where('status', 1)
            ->count();
    }
}